package db_operations;

import java.sql.SQLException;

import Beans.Azienda;
import Beans.Sede;


public interface GestioneAziende {
	
//AGGIORNAMENTI
	
	/**
	 * inserisce un azienda nel DB
	 * @param Azienda: l'azienda da inserire
	 * @throws SQLException
	 */
	public void aggiungiAzienda(Azienda a) throws SQLException;
	
	
	/**
	 * modifica un azienda
	 * @param Azienda a
	 * @throws SQLException
	 */
	public void modificaAzienda(Azienda a) throws SQLException;
	
	
	/**
	 * elimina un azienda dal DB
	 * NOTA BENE: eliminazione logica: spostamento dell'entry nella tabella "deleted"
	 * @param Azienda a
	 * @throws SQLException
	 */
	public void eliminaAzienda(Azienda a) throws SQLException;
	
	
	
	//RICERCA

	/**
	 * restituisce l'azienda con l'id specificato
	 * @param int id
	 * @throws SQLException
	 */
	public Azienda getAzienda(int id) throws SQLException;
	
	
	/**
	 * restituisce la lista di tutte le aziende presenti nel DB
	 * @return Azienda[]
	 * @throws SQLException
	 */
	public Azienda[] getListaAziende() throws SQLException;
	
	
	/**
	 * restituisce un azienda nella lista deleted, se presente
	 * @param id
	 * @return Azienda
	 * @throws SQLException
	 */
	public Azienda getAziendaDeleted(int id) throws SQLException;
	
	
	/**
	 * restituisce la lista di tutte le aziende eliminate
	 * @return Azienda[]
	 * @throws SQLException
	 */
	public Azienda[] getListaAziendeDeleted() throws SQLException;
	
	
	/**
	 * ricerca azienda su diversi parametri.
	 * NOTA: le locazioni degli array nomiParametri e valoriParametri devono essere 
	 * 		correlate: se nomiParametri[i] contiene "Nazione", 
	 * 					valoriParamentri[i] contiene il nome della nazione.
	 * @param nomiParametri: contiene la lista dei nomi degli attributi sui quali
	 * 			effettuare la ricerca. Ad esempio "Nazione", "Città" ecc..
	 * @param valoriParametri: contiene la lista dei valori degli attributi sui quali
	 * 			effettuare la ricerca. Ad esempio "Italia", "Milano" ecc...
	 * @return Azienda[]
	 * @throws SQLException
	 */
	public Azienda[] ricercaAzienda(String[] nomiParametri, String[] valoriParametri) throws SQLException;
	
	
	/**
	 * ricerca Azienda su diversi parametri. Da utilizzare se i parametri non sono tutti stringhe.
	 * NOTA: le locazioni degli array nomiParametri e valoriParametri devono essere 
	 * 		correlate: se nomiParametri[i] contiene "Nazione", 
	 * 					valoriParamentri[i] contiene il nome della nazione.
	 * @param nomiParametri: contiene la lista dei nomi degli attributi sui quali
	 * 			effettuare la ricerca. Ad esempio "Nazione", "Città" ecc..
	 * @param valoriParametri: contiene la lista dei valori degli attributi sui quali
	 * 			effettuare la ricerca. Ad esempio "Italia", "Milano" ecc...
	 * @param tipiParametri: array contenente nomi di tipo: se tipiParametri[i] è "int"
	 * 			allora nomiParametri[i] sarà di tipo int.
	 * @return Azienda[]
	 * @throws SQLException
	 */
	public Azienda[] ricercaAzienda(String[] nomiParametri, String[] tipiParametri, String[] valoriParametri) throws SQLException;
	
	
	/**
	 * ricerca Azienda su singolo attributo
	 * @param parametro
	 * @param valore
	 * @return Azienda[]
	 * @throws SQLException
	 */
	public Azienda[] ricercaAzienda(String parametro, String valore) throws SQLException;
	
	
	/**
	 * ricerca le aziende di un determinato tipo
	 * @param TipoAzienda tipo
	 * @return Azienda[]
	 * @throws SQLException
	 */
	public Azienda[] ricercaAziendaPerTipo(String tipo) throws SQLException;
	
	
	/**
	 * ricerca le aziende per nazione
	 * @param String nazione
	 * @return Azienda[]
	 * @throws SQLException
	 */
	public Azienda[] ricercaAziendaPerNazione(String nazione) throws SQLException;
	
	
	/**
	 * ricerca le aziende per regione
	 * @param String regione
	 * @return Azienda[]
	 * @throws SQLException
	 */
	public Azienda[] ricercaAziendaPerRegione(String regione) throws SQLException;
	
	
	/**
	 * ricerca le aziende per città
	 * @param String citta
	 * @return Azienda[]
	 * @throws SQLException
	 */
	public Azienda[] ricercaAziendaPerCitta(String citta) throws SQLException;
	
	
	/**
	 * ricerca le aziende per città
	 * @param String cap
	 * @return Azienda[]
	 * @throws SQLException
	 */
	public Azienda[] ricercaAziendaPerCAP(String cap) throws SQLException;
	
	
	
	/**
	 * ricerca le aziende per provincia
	 * @param String provincia
	 * @return Azienda[]
	 * @throws SQLException
	 */
	public Azienda[] ricercaAziendaPerProvincia(String provincia) throws SQLException;
	
	
	/**
	 * restituisce le sedi di una determinata azienda
	 * @param Azienda a
	 * @return Sede[]
	 * @throws SQLException
	 */
	public Sede[] getSediAzienda(Azienda a) throws SQLException;
	
	
	/**
	 * restituisce le sedi di una determinata azienda
	 * @param int idAzienda
	 * @return Sede[]
	 * @throws SQLException
	 */
	public Sede[] getSediAzienda(int idAzienda) throws SQLException;
	
	
	
	/**
	 * restituisce tutte le sedi di tutte le aziende
	 * @return Sede[]
	 * @throws SQLException
	 */
	public Sede[] getSedi() throws SQLException;
	
	
	/**
	 * aggiunge una sede per quell'azienda
	 * @param s
	 * @throws SQLException
	 */
	public void aggiungiSede(Sede s) throws SQLException;


}
